package top.llove.service.impl;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.setting.Setting;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import top.llove.service.ImageService;
import top.llove.utils.time.TimeUtils;
import top.llove.utils.FileUtils;
import top.llove.utils.GitUtils;
import top.llove.utils.res.ApiResult;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 图床Service实现类
 *
 * @author: 幸会
 * @date: 2021/6/8 20:09
 * @email: 1846724873@qq.com
 * @description: 图床Service实现类
 * version: 1.0
 */
@Service
@Slf4j
public class ImageServiceImpl implements ImageService {


    @Autowired
    private ApiResult res;

    private Setting set = new Setting("config.setting");

    /**
     * 上传图片
     */
    @Override
    public ApiResult upload(MultipartFile file){
        Map<String, Object> map = new HashMap<>();

        String path = "";

        try {
            GitUtils.pull(); // 拉取远程仓库
            String time = TimeUtils.getTime(); // 获取当天日期， 作为当天文件分类
            String filename = file.getOriginalFilename(); // 获取文件名称

            String type = FileUtils.getType(filename); // 获取文件类型
            String uuid = IdUtil.fastSimpleUUID(); // 获取UUID作为文件名称
            path = time + "/" + type + "/"; // 拼接文件保存路径
            FileUtils.mkdir(set.get("xh.img.upload") + path); // 判断路径是否存在
            path += uuid + "." + type;
            boolean upload = FileUtils.upload(file, path); // 写文件
            if(upload) {

                String name = FileUtils.getName(filename); // 获取文件名称，去后缀
                String now = TimeUtils.getTime("yyyy-MM-dd HH:mm:ss:SS");// 获取当前准确时间
                GitUtils.commit(name + ", " + now); // 提交所有文件到本地仓库
                GitUtils.push();// 推送到远程仓库
                String url = (set.get("xh.img.upload") + path).replace(set.get("xh.img.path"), set.get("xh.img.git.url")); // 获取图片URL
                map.put("url", url);
                res = ApiResult.success("上传成功", map);
            }
        } catch (IOException e) {
            e.printStackTrace();
            FileUtil.del(path); // 删除文件
            res = ApiResult.fail("上传失败", "写文件错误");
        } catch (GitAPIException e) {
            e.printStackTrace();
            FileUtil.del(path); // 删除文件
            res = ApiResult.fail("上传失败", null);
        }
        log.info(res.toString());
        return res;
    }



    /*public ApiResult upload(MultipartFile[] file) {

        try {
            GitUtils.pull(); // 拉取远程仓库
            String time = BaseUtils.getTime(); // 获取当天日期， 作为当天文件分类





            path += uuid + "." + type;
            boolean upload = FileUtils.upload(file, path); // 写文件
            for (MultipartFile f : file) {
                Boolean upload = FileUtils.upload(f, "");
                String filename = f.getOriginalFilename(); // 获取文件名称
                String type = FileUtils.getType(filename); // 获取文件类型
                String uuid = IdUtil.fastSimpleUUID(); // 获取UUID作为文件名称
                String path = time + "/" + type + "/"; // 拼接文件保存路径
                FileUtils.mkdir(set.get("xh.img.upload") + path); // 判断路径是否存在
            }
        } catch (GitAPIException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return res;
    }*/


}
